<?php
/**
 * Autor:   Miguel A. Zilli
 * Email:   miguelzilli@gmail.com
 */

class Usuario extends AppModel {
    var $name = 'Usuario';
    var $displayField = 'username';
    var $recursive='0';
    var $order=array(
        'Usuario.apellido'=>'ASC',
        'Usuario.nombre'=>'ASC',
    );

    var $validate = array(
        'apellido' => array(
            array('rule'=>'notEmpty','message'=>'Debe completar este dato.','required'=>true)
        ),
        'nombre' => array(
            array('rule'=>'notEmpty','message'=>'Debe completar este dato.','required'=>true)
        ),
        'username' => array(
            array('rule'=>'alphaNumeric','message'=>'Solo se permiten letras y números.','allowEmpty' => false),
            array('rule'=>'isUnique','message'=>'Error: nombre de usuario existente. Elija otro.'),
            array('rule'=>array('between',5,30),'message'=>'Debe tener entre 5 y 30 caracteres.'),
            array('rule'=>'notEmpty','message'=>'Debe completar este dato.','required'=>true)
        ),
        'password' => array(
            array('rule'=>array('between',5,15),'message'=>'Debe tener entre 5 y 15 caracteres.'),
            array('rule'=>array('checkPasswords'),'message'=>'Las contraseñas no coinciden.','required'=>true),
            array('rule'=>'notEmpty','message'=>'Debe completar este dato.','required'=>true)
        ),
        'email' => array(
            array('rule'=>'email','message'=>'Direccion de email invalida.','allowEmpty' => false),
            array('rule'=>'notEmpty','message'=>'Debe completar este dato.','required'=>true)
        ),
        'tipo' => array(
            array('rule'=>'notEmpty','message'=>'Debe completar este dato.','required'=>true)
        ),
        'acoentidad_id' => array(
            array('rule'=>array('validarAcoentidadId'),'message'=>'Debe seleccionar una entidad.','required'=>true)
        )
    );

    function checkPasswords($data){
        return ($data['password']==$this->data['Usuario']['password2']);
    }

    function validarAcoentidadId($data){
        if($this->data['Usuario']['tipo']!='ADMIN'){
            return ($data['acoentidad_id']!='');
        }elseif($this->data['Usuario']['tipo']=='ADMIN'){
            $this->data['Usuario']['acoentidad_id']='';
            return true;
        }
    }
    
    var $belongsTo = array(
        'Acoentidad' => array(
            'className'=>'Acoentidad',
            'foreignKey'=>'acoentidad_id'
        )
    );

    public function beforeSave(){
        if(!empty($this->data['Usuario'])){
            $this->data['Usuario']['apellido']=strtoupper($this->data['Usuario']['apellido']);
            $this->data['Usuario']['nombre']=strtoupper($this->data['Usuario']['nombre']);
            $this->data['Usuario']['username']= str_replace(' ','',strtolower($this->data['Usuario']['username']));
            $this->data['Usuario']['email']=strtolower($this->data['Usuario']['email']);
        }
        return true;
    }

/*
 * usado para la validacion de datos en el inicio de sesion en el sistema.
 * deja entrar solamente a usuarios de tipo ADMIN o ACOENTIDAD y que ademas
 * pasen la comprobacion de usuario y contraseña.
 */
    function validateLogin($data){
        $user = $this->find('first',array(
                'fields'=>array('Usuario.id','Usuario.tipo','Usuario.acoentidad_id','Acoentidad.nombre_ent'),
                'conditions'=>array(
                    'Usuario.username' => $data['username'],
                    'Usuario.password' => md5($data['password']),
                    'OR'=>array(
                        array('Usuario.tipo'=>'ADMIN'),
                        array('Usuario.tipo'=>'ACOENTIDAD'))
                )));
        if(!empty($user)){
            return $user;
            //return $user['Usuario'];
        }else{
            return false;
        }
    }
}
?>